La parte derecha de una asignación es una expresión. Una expresión es esencialmente una fórmulita que permite calcular un valor. La expresión puede ser desde un literal (un 2 por ejemplo) hasta una fórmula compleja con muchas variables.
Calcular el valor de una expresión es lo que se llama evaluar una expresión. Por tanto, si tenemos la variable
double x;
y hacemos la asignación siguiente:
x = 4.5 * 3;
para ejecutar la asignación primero hay que evaluar la expresión 4.5 * 3. Esta expresión es fácil de evaluar, dará 13.5.
Otra característica de una expresión es que tiene un tipo. Por ejemplo la expresión 3.0 + 1.5 tiene tipo double y por tanto podemos asignar el valor resultante a una variable de tipo double. En general el tipo del valor resultante de evaluar una expresión tiene que coincidir con el tipo de la variable que lo almacenará. Esto seria incorrecto
double x; x = "hola";
No hay manera de guardar un string en una variable de tipo double, por definición. Por consiguiente, tampoco tiene sentido algo como:
string s; s = 1.3 + 3.1;
porque pretendemos meter un valor double en una variable de tipo string.
Las expresiones más sencillas son simplemente literales, o sea valores directos
x = 1.2;
Las siguientes serían expresiones donde hay un solo operador y dos literales, como la que hemos visto antes
x = 4.5 * 3;
Después ya vienen expresiones que utilizan el valor de otra variable. Por ejemplo, si tenemos la declaración
int a = 1, b;
y ponemos la asignación
b = a + 3;
para evaluar la expresión a + 3 primero hay que ir a buscar el valor que hay en a y luego sumarle 3. Ese valor será el que pondremos en b.
Los operadores para las otras operaciones numéricas son estos: - para la resta, * para la multiplicación y / para la división.
O sea, hacer
b = a * 3;
cuando a vale 2 quiere decir que pondremos un 6 en la b.
Existe un caso especial cuando trabajamos con enteros y es el hecho de que al dividir dos variables de tipo int se produce un resultado de tipo int y no double. O sea, el programa siguiente mostrará por pantalla un 2, no un 2.5:
int main() { int a, b; a = 5; b = 2; cout << a / b << endl; }
Esto es porque si dividimos solamente con enteros, 5 partido por 2 es 2 (aunque con resto 1, claro). Es decir, se toma el resultado de la división y el resto va aparte. Esto es algo que hay que practicar, el resultado de las siguientes instrucciones
cout << 8 / 3 << endl; cout << 15 / 4 << endl; cout << 13 / 10 << endl;
es 2, 3 y 1 respectivamente. Una pregunta que ayuda es decir: "cuántos treses hay en un ocho?". Pues hay dos, y sobran 2 unidades. O sea la división de 8 por 3 es 2.
La división entera se aplica cuando los dos operandos en los lados de la división son enteros. Por ejemplo, la siguiente instrucción
cout << 8.0 / 3 << endl;
muestra 2.66667. Eso es porque el 8.0 es seguro un real, y luego el 3 es un entero pero se convierte a real para poder hacer la división. Lo mismo ocurre con
cout << 8 / 3.0 << endl;
pero con el 3.
Solamente si los dos lados de la división son enteros entonces se aplica la división entera.
En preparación